def lengthOfLongestSubstring(s: str) -> int:
    n = len(s)
    ans = 0
    # 使用字典来存储字符和它们的下标
    index = {}
    # 定义滑动窗口的边界为 [i, j]
    i = 0
    for j in range(n):
        if s[j] in index:
            # 如果字符已经在窗口中，更新左边界 i
            i = max(index[s[j]], i)
        # 更新最长子串的长度
        ans = max(ans, j - i + 1)
        # 更新字符的下标
        index[s[j]] = j + 1
    return ans
#黄陶
s1 = "abcabcbb"
print(lengthOfLongestSubstring(s1))  # 输出 3
